{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy\n",
    "import matplotlib.pyplot as plt\n",
    "from pandas import read_csv\n",
    "import math\n",
    "from keras.models import Sequential\n",
    "from keras.layers import Dense\n",
    "from keras.layers import LSTM\n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "from sklearn.metrics import mean_squared_error\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# load the dataset\n",
    "dataframe = read_csv('CPI指数.csv', usecols=[1], engine='python', skipfooter=3)\n",
    "dataset = dataframe.values\n",
    "# 将整型变为float\n",
    "dataset = dataset.astype('float32')\n",
    "\n",
    "plt.plot(dataset)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "# X is the number of passengers at a given time (t) and Y is the number of passengers at the next time (t + 1).\n",
    "\n",
    "# convert an array of values into a dataset matrix\n",
    "def create_dataset(dataset, look_back=1):\n",
    "    dataX, dataY = [], []\n",
    "    for i in range(len(dataset)-look_back-1):\n",
    "        a = dataset[i:(i+look_back), 0]\n",
    "        dataX.append(a)\n",
    "        dataY.append(dataset[i + look_back, 0])\n",
    "    return numpy.array(dataX), numpy.array(dataY)\n",
    "\n",
    "# fix random seed for reproducibility\n",
    "numpy.random.seed(7)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [],
   "source": [
    "# normalize the dataset\n",
    "scaler = MinMaxScaler(feature_range=(0, 1))\n",
    "dataset = scaler.fit_transform(dataset)\n",
    "\n",
    "\n",
    "# split into train and test sets\n",
    "train_size = int(len(dataset) * 0.8)\n",
    "test_size = len(dataset) - train_size\n",
    "train, test = dataset[0:train_size,:], dataset[train_size:len(dataset),:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [],
   "source": [
    "# use this function to prepare the train and test datasets for modeling\n",
    "look_back = 1\n",
    "trainX, trainY = create_dataset(train, look_back)\n",
    "testX, testY = create_dataset(test, look_back)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "# reshape input to be [samples, time steps, features]\n",
    "trainX = numpy.reshape(trainX, (trainX.shape[0], 1, trainX.shape[1]))\n",
    "testX = numpy.reshape(testX, (testX.shape[0], 1, testX.shape[1]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/100\n",
      "24/24 - 2s - loss: 0.1502 - 2s/epoch - 78ms/step\n",
      "Epoch 2/100\n",
      "24/24 - 0s - loss: 0.1383 - 32ms/epoch - 1ms/step\n",
      "Epoch 3/100\n",
      "24/24 - 0s - loss: 0.1281 - 29ms/epoch - 1ms/step\n",
      "Epoch 4/100\n",
      "24/24 - 0s - loss: 0.1174 - 33ms/epoch - 1ms/step\n",
      "Epoch 5/100\n",
      "24/24 - 0s - loss: 0.1088 - 30ms/epoch - 1ms/step\n",
      "Epoch 6/100\n",
      "24/24 - 0s - loss: 0.1002 - 33ms/epoch - 1ms/step\n",
      "Epoch 7/100\n",
      "24/24 - 0s - loss: 0.0932 - 31ms/epoch - 1ms/step\n",
      "Epoch 8/100\n",
      "24/24 - 0s - loss: 0.0863 - 32ms/epoch - 1ms/step\n",
      "Epoch 9/100\n",
      "24/24 - 0s - loss: 0.0808 - 30ms/epoch - 1ms/step\n",
      "Epoch 10/100\n",
      "24/24 - 0s - loss: 0.0768 - 30ms/epoch - 1ms/step\n",
      "Epoch 11/100\n",
      "24/24 - 0s - loss: 0.0722 - 30ms/epoch - 1ms/step\n",
      "Epoch 12/100\n",
      "24/24 - 0s - loss: 0.0691 - 33ms/epoch - 1ms/step\n",
      "Epoch 13/100\n",
      "24/24 - 0s - loss: 0.0668 - 33ms/epoch - 1ms/step\n",
      "Epoch 14/100\n",
      "24/24 - 0s - loss: 0.0646 - 32ms/epoch - 1ms/step\n",
      "Epoch 15/100\n",
      "24/24 - 0s - loss: 0.0634 - 30ms/epoch - 1ms/step\n",
      "Epoch 16/100\n",
      "24/24 - 0s - loss: 0.0621 - 30ms/epoch - 1ms/step\n",
      "Epoch 17/100\n",
      "24/24 - 0s - loss: 0.0610 - 32ms/epoch - 1ms/step\n",
      "Epoch 18/100\n",
      "24/24 - 0s - loss: 0.0601 - 29ms/epoch - 1ms/step\n",
      "Epoch 19/100\n",
      "24/24 - 0s - loss: 0.0594 - 30ms/epoch - 1ms/step\n",
      "Epoch 20/100\n",
      "24/24 - 0s - loss: 0.0586 - 31ms/epoch - 1ms/step\n",
      "Epoch 21/100\n",
      "24/24 - 0s - loss: 0.0582 - 32ms/epoch - 1ms/step\n",
      "Epoch 22/100\n",
      "24/24 - 0s - loss: 0.0578 - 34ms/epoch - 1ms/step\n",
      "Epoch 23/100\n",
      "24/24 - 0s - loss: 0.0574 - 30ms/epoch - 1ms/step\n",
      "Epoch 24/100\n",
      "24/24 - 0s - loss: 0.0568 - 31ms/epoch - 1ms/step\n",
      "Epoch 25/100\n",
      "24/24 - 0s - loss: 0.0565 - 30ms/epoch - 1ms/step\n",
      "Epoch 26/100\n",
      "24/24 - 0s - loss: 0.0559 - 31ms/epoch - 1ms/step\n",
      "Epoch 27/100\n",
      "24/24 - 0s - loss: 0.0555 - 33ms/epoch - 1ms/step\n",
      "Epoch 28/100\n",
      "24/24 - 0s - loss: 0.0551 - 35ms/epoch - 1ms/step\n",
      "Epoch 29/100\n",
      "24/24 - 0s - loss: 0.0546 - 31ms/epoch - 1ms/step\n",
      "Epoch 30/100\n",
      "24/24 - 0s - loss: 0.0547 - 29ms/epoch - 1ms/step\n",
      "Epoch 31/100\n",
      "24/24 - 0s - loss: 0.0542 - 29ms/epoch - 1ms/step\n",
      "Epoch 32/100\n",
      "24/24 - 0s - loss: 0.0536 - 31ms/epoch - 1ms/step\n",
      "Epoch 33/100\n",
      "24/24 - 0s - loss: 0.0533 - 32ms/epoch - 1ms/step\n",
      "Epoch 34/100\n",
      "24/24 - 0s - loss: 0.0529 - 29ms/epoch - 1ms/step\n",
      "Epoch 35/100\n",
      "24/24 - 0s - loss: 0.0525 - 28ms/epoch - 1ms/step\n",
      "Epoch 36/100\n",
      "24/24 - 0s - loss: 0.0521 - 29ms/epoch - 1ms/step\n",
      "Epoch 37/100\n",
      "24/24 - 0s - loss: 0.0518 - 31ms/epoch - 1ms/step\n",
      "Epoch 38/100\n",
      "24/24 - 0s - loss: 0.0515 - 30ms/epoch - 1ms/step\n",
      "Epoch 39/100\n",
      "24/24 - 0s - loss: 0.0512 - 37ms/epoch - 2ms/step\n",
      "Epoch 40/100\n",
      "24/24 - 0s - loss: 0.0508 - 31ms/epoch - 1ms/step\n",
      "Epoch 41/100\n",
      "24/24 - 0s - loss: 0.0505 - 30ms/epoch - 1ms/step\n",
      "Epoch 42/100\n",
      "24/24 - 0s - loss: 0.0501 - 31ms/epoch - 1ms/step\n",
      "Epoch 43/100\n",
      "24/24 - 0s - loss: 0.0499 - 33ms/epoch - 1ms/step\n",
      "Epoch 44/100\n",
      "24/24 - 0s - loss: 0.0498 - 31ms/epoch - 1ms/step\n",
      "Epoch 45/100\n",
      "24/24 - 0s - loss: 0.0493 - 31ms/epoch - 1ms/step\n",
      "Epoch 46/100\n",
      "24/24 - 0s - loss: 0.0491 - 29ms/epoch - 1ms/step\n",
      "Epoch 47/100\n",
      "24/24 - 0s - loss: 0.0487 - 29ms/epoch - 1ms/step\n",
      "Epoch 48/100\n",
      "24/24 - 0s - loss: 0.0484 - 30ms/epoch - 1ms/step\n",
      "Epoch 49/100\n",
      "24/24 - 0s - loss: 0.0484 - 28ms/epoch - 1ms/step\n",
      "Epoch 50/100\n",
      "24/24 - 0s - loss: 0.0479 - 29ms/epoch - 1ms/step\n",
      "Epoch 51/100\n",
      "24/24 - 0s - loss: 0.0476 - 30ms/epoch - 1ms/step\n",
      "Epoch 52/100\n",
      "24/24 - 0s - loss: 0.0474 - 33ms/epoch - 1ms/step\n",
      "Epoch 53/100\n",
      "24/24 - 0s - loss: 0.0472 - 37ms/epoch - 2ms/step\n",
      "Epoch 54/100\n",
      "24/24 - 0s - loss: 0.0469 - 32ms/epoch - 1ms/step\n",
      "Epoch 55/100\n",
      "24/24 - 0s - loss: 0.0468 - 31ms/epoch - 1ms/step\n",
      "Epoch 56/100\n",
      "24/24 - 0s - loss: 0.0465 - 30ms/epoch - 1ms/step\n",
      "Epoch 57/100\n",
      "24/24 - 0s - loss: 0.0463 - 30ms/epoch - 1ms/step\n",
      "Epoch 58/100\n",
      "24/24 - 0s - loss: 0.0460 - 32ms/epoch - 1ms/step\n",
      "Epoch 59/100\n",
      "24/24 - 0s - loss: 0.0460 - 33ms/epoch - 1ms/step\n",
      "Epoch 60/100\n",
      "24/24 - 0s - loss: 0.0458 - 33ms/epoch - 1ms/step\n",
      "Epoch 61/100\n",
      "24/24 - 0s - loss: 0.0458 - 30ms/epoch - 1ms/step\n",
      "Epoch 62/100\n",
      "24/24 - 0s - loss: 0.0454 - 29ms/epoch - 1ms/step\n",
      "Epoch 63/100\n",
      "24/24 - 0s - loss: 0.0453 - 31ms/epoch - 1ms/step\n",
      "Epoch 64/100\n",
      "24/24 - 0s - loss: 0.0454 - 30ms/epoch - 1ms/step\n",
      "Epoch 65/100\n",
      "24/24 - 0s - loss: 0.0454 - 34ms/epoch - 1ms/step\n",
      "Epoch 66/100\n",
      "24/24 - 0s - loss: 0.0451 - 32ms/epoch - 1ms/step\n",
      "Epoch 67/100\n",
      "24/24 - 0s - loss: 0.0447 - 30ms/epoch - 1ms/step\n",
      "Epoch 68/100\n",
      "24/24 - 0s - loss: 0.0446 - 33ms/epoch - 1ms/step\n",
      "Epoch 69/100\n",
      "24/24 - 0s - loss: 0.0449 - 32ms/epoch - 1ms/step\n",
      "Epoch 70/100\n",
      "24/24 - 0s - loss: 0.0443 - 31ms/epoch - 1ms/step\n",
      "Epoch 71/100\n",
      "24/24 - 0s - loss: 0.0443 - 31ms/epoch - 1ms/step\n",
      "Epoch 72/100\n",
      "24/24 - 0s - loss: 0.0443 - 29ms/epoch - 1ms/step\n",
      "Epoch 73/100\n",
      "24/24 - 0s - loss: 0.0442 - 31ms/epoch - 1ms/step\n",
      "Epoch 74/100\n",
      "24/24 - 0s - loss: 0.0440 - 35ms/epoch - 1ms/step\n",
      "Epoch 75/100\n",
      "24/24 - 0s - loss: 0.0440 - 33ms/epoch - 1ms/step\n",
      "Epoch 76/100\n",
      "24/24 - 0s - loss: 0.0437 - 30ms/epoch - 1ms/step\n",
      "Epoch 77/100\n",
      "24/24 - 0s - loss: 0.0440 - 30ms/epoch - 1ms/step\n",
      "Epoch 78/100\n",
      "24/24 - 0s - loss: 0.0436 - 31ms/epoch - 1ms/step\n",
      "Epoch 79/100\n",
      "24/24 - 0s - loss: 0.0437 - 30ms/epoch - 1ms/step\n",
      "Epoch 80/100\n",
      "24/24 - 0s - loss: 0.0433 - 29ms/epoch - 1ms/step\n",
      "Epoch 81/100\n",
      "24/24 - 0s - loss: 0.0434 - 30ms/epoch - 1ms/step\n",
      "Epoch 82/100\n",
      "24/24 - 0s - loss: 0.0434 - 30ms/epoch - 1ms/step\n",
      "Epoch 83/100\n",
      "24/24 - 0s - loss: 0.0439 - 34ms/epoch - 1ms/step\n",
      "Epoch 84/100\n",
      "24/24 - 0s - loss: 0.0432 - 32ms/epoch - 1ms/step\n",
      "Epoch 85/100\n",
      "24/24 - 0s - loss: 0.0433 - 31ms/epoch - 1ms/step\n",
      "Epoch 86/100\n",
      "24/24 - 0s - loss: 0.0431 - 31ms/epoch - 1ms/step\n",
      "Epoch 87/100\n",
      "24/24 - 0s - loss: 0.0432 - 33ms/epoch - 1ms/step\n",
      "Epoch 88/100\n",
      "24/24 - 0s - loss: 0.0430 - 30ms/epoch - 1ms/step\n",
      "Epoch 89/100\n",
      "24/24 - 0s - loss: 0.0429 - 29ms/epoch - 1ms/step\n",
      "Epoch 90/100\n",
      "24/24 - 0s - loss: 0.0431 - 31ms/epoch - 1ms/step\n",
      "Epoch 91/100\n",
      "24/24 - 0s - loss: 0.0432 - 31ms/epoch - 1ms/step\n",
      "Epoch 92/100\n",
      "24/24 - 0s - loss: 0.0431 - 29ms/epoch - 1ms/step\n",
      "Epoch 93/100\n",
      "24/24 - 0s - loss: 0.0431 - 30ms/epoch - 1ms/step\n",
      "Epoch 94/100\n",
      "24/24 - 0s - loss: 0.0427 - 32ms/epoch - 1ms/step\n",
      "Epoch 95/100\n",
      "24/24 - 0s - loss: 0.0430 - 31ms/epoch - 1ms/step\n",
      "Epoch 96/100\n",
      "24/24 - 0s - loss: 0.0431 - 30ms/epoch - 1ms/step\n",
      "Epoch 97/100\n",
      "24/24 - 0s - loss: 0.0432 - 30ms/epoch - 1ms/step\n",
      "Epoch 98/100\n",
      "24/24 - 0s - loss: 0.0426 - 30ms/epoch - 1ms/step\n",
      "Epoch 99/100\n",
      "24/24 - 0s - loss: 0.0427 - 29ms/epoch - 1ms/step\n",
      "Epoch 100/100\n",
      "24/24 - 0s - loss: 0.0427 - 28ms/epoch - 1ms/step\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<keras.callbacks.History at 0x20e46f40d90>"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# create and fit the LSTM network\n",
    "model = Sequential()\n",
    "model.add(LSTM(4, input_shape=(1, look_back)))\n",
    "model.add(Dense(1))\n",
    "model.compile(loss='mean_squared_error', optimizer='adam')\n",
    "model.fit(trainX, trainY, epochs=100, batch_size=1, verbose=2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [],
   "source": [
    "# make predictions\n",
    "trainPredict = model.predict(trainX)\n",
    "testPredict = model.predict(testX)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [],
   "source": [
    "# invert predictions\n",
    "trainPredict = scaler.inverse_transform(trainPredict)\n",
    "trainY = scaler.inverse_transform([trainY])\n",
    "testPredict = scaler.inverse_transform(testPredict)\n",
    "testY = scaler.inverse_transform([testY])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train Score: 5.25 RMSE\n",
      "Test Score: 2.00 RMSE\n"
     ]
    }
   ],
   "source": [
    "trainScore = math.sqrt(mean_squared_error(trainY[0], trainPredict[:,0]))\n",
    "print('Train Score: %.2f RMSE' % (trainScore))\n",
    "testScore = math.sqrt(mean_squared_error(testY[0], testPredict[:,0]))\n",
    "print('Test Score: %.2f RMSE' % (testScore))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# shift train predictions for plotting\n",
    "trainPredictPlot = numpy.empty_like(dataset)\n",
    "trainPredictPlot[:, :] = numpy.nan\n",
    "trainPredictPlot[look_back:len(trainPredict)+look_back, :] = trainPredict\n",
    "\n",
    "# shift test predictions for plotting\n",
    "testPredictPlot = numpy.empty_like(dataset)\n",
    "testPredictPlot[:, :] = numpy.nan\n",
    "testPredictPlot[len(trainPredict)+(look_back*2)+1:len(dataset)-1, :] = testPredict\n",
    "\n",
    "# plot baseline and predictions\n",
    "plt.plot(scaler.inverse_transform(dataset))\n",
    "plt.plot(trainPredictPlot)\n",
    "plt.plot(testPredictPlot)\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "interpreter": {
   "hash": "a8f61be024eba58adef938c9aa1e29e02cb3dece83a5348b1a2dafd16a070453"
  },
  "kernelspec": {
   "display_name": "Python 3.9.7 64-bit ('base': conda)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.7"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
